# Python异常处理机制

"""
Python异常处理的完整语法结构：
try:
    可能发生异常的代码
except 异常类型1 as e:
    处理异常1的代码
except 异常类型2 as e:
    处理异常2的代码
else:
    没有异常时执行的代码
finally:
    无论是否发生异常都会执行的代码
"""

import traceback

print("="*50)
print("Python异常处理机制完整示例")
print("="*50)

# 1. 基本的try-except结构
print("\n1. 基本的try-except示例")
print("-"*40)
try:
    num = int(input("请输入一个数字："))
    result = 100 / num
    print(f"100除以{num}的结果是：{result}")
except ValueError as e:
    print(f"输入错误：{e}")
    print("请确保输入的是一个有效的数字！")
except ZeroDivisionError as e:
    print(f"除零错误：{e}")
    print("除数不能为零！")

# 2. 完整的try-except-else-finally结构
print("\n2. 完整的try-except-else-finally示例")
print("-"*40)
try:
    # 尝试打开并读取文件
    file = open("test.txt", "r", encoding="utf-8")
    content = file.read()
except FileNotFoundError as e:
    print(f"文件不存在：{e}")
    print("请确保文件存在后再试！")
else:
    # 只有当try块中的代码成功执行时，才会执行else块
    print("文件内容：", content)
    print("文件读取成功！")
finally:
    # 无论是否发生异常，finally块都会执行
    print("这里的代码总是会执行")
    # 安全关闭文件
    if 'file' in locals() and not file.closed:
        file.close()
        print("文件已关闭")

# 3. 使用traceback库显示详细的错误信息
print("\n3. traceback库使用示例")
print("-"*40)

def divide_numbers(a, b):
    return a / b

def calculate():
    x = 10
    y = 0
    result = divide_numbers(x, y)
    return result

try:
    # 调用可能产生异常的函数
    calculate()
except ZeroDivisionError:
    print("发生了除零错误，以下是详细的错误跟踪信息：")
    # 使用traceback打印详细的错误信息
    print("\n--- traceback.format_exc() 输出 ---")
    error_msg = traceback.format_exc()
    print(error_msg)